﻿
/*有关取消异步任务的说明：

  #在开发异步方法，包括有关异步迭代器的方法时，请遵循以下规范：
  它们都应该在设计时考虑到取消问题，
  现有的不符合该规范的API应该慢慢加以改造，直至符合要求

  #但是，所有第一个参数是IAsyncEnumerable，且返回IAsyncEnumerable的扩展方法（最典型的例子是异步Linq）不要支持取消，
  这是因为如果这样的话，就需要在调用链中返回的每一个IAsyncEnumerable上面传入取消令牌，这非常麻烦，也很丑陋，
  如果需要支持取消，仅需要在第一个或最后一个IAsyncEnumerable上传入令牌即可

  #根据微软文档的说明，通过Task.Run(Func<Task>, CancellationToken)配置支持取消的Task时，
  无法取消已经开始的任务，因此这个API的用途事实上极为有限，请不要依赖它*/